package com.winsdom.service.customer;

import com.winsdom.entity.customer.CustomerIndividualCreateRequest;

/**
 * 个体工商户客户创建服务接口
 * <p>
 * 该接口负责处理个体工商户客户的完整创建流程，包括：
 * 1. 客户主表信息插入（基础信息）
 * 2. 个体工商户扩展表信息插入（如经营者信息）
 * 3. 经营地址、营业执照图片等附属信息管理
 * 4. 联系人信息及楼盘分类关联关系维护
 * <p>
 * 所有操作通过实现类中的事务管理确保数据一致性，
 * 若中途出现异常将自动回滚，保证数据完整性。
 */
public interface CustomerIndividualCreateService {

    /**
     * 创建个体工商户客户的完整业务方法
     * <p>
     * 业务流程：
     * 1. 自动校验并设置客户类型为个体工商户（类型码固定为2）
     * 2. 插入客户主表记录并获取自增ID
     * 3. 插入个体工商户扩展表信息（经营者姓名、身份证号等）
     * 4. 插入经营地址信息（非空时）
     * 5. 插入营业执照图片路径（非空时）
     * 6. 处理联系人信息及楼盘分类关联（支持多联系人，自动去重楼盘名称）
     * <p>
     * 数据规范：
     * - 传入的{@link CustomerIndividualCreateRequest}对象需包含客户基础信息，
     *   其中updateUserId（操作人ID）为必填项
     * - 客户类型将被强制设置为个体工商户（类型码2），不可修改
     * - 联系人关联的楼盘名称将自动去重，避免重复关联
     *
     * @param request 个体工商户创建请求实体，包含完整的客户创建数据（非null）
     * @throws IllegalArgumentException 当request为null或必填字段缺失时抛出
     * @see com.winsdom.service.customer.impl.CustomerIndividualCreateServiceImpl
     */
    void create(CustomerIndividualCreateRequest request);
}